package portal.facade;

import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import portal.entidades.Articulo;
import portal.entidades.Compra;
import portal.entidades.Configuracion;
import portal.entidades.RankingArticulo;
import portal.entidades.Resultado;
import portal.entidades.Usuario;
import portal.servicios.ArticuloService;
import portal.servicios.CompraService;
import portal.servicios.ConfigurationService;
import portal.servicios.NotificacionAuditoriaService;
import portal.servicios.UsuarioService;

@Stateless
public class FacadeBean implements Facade {

	@EJB
	private UsuarioService usuarioService;

	@EJB
	private ConfigurationService confService;

	@EJB
	private ArticuloService artService;

	@EJB
	private CompraService comprasService;
	
	@EJB
	private NotificacionAuditoriaService notificarService;

	public FacadeBean() {
		// TODO Auto-generated constructor stub
	}

	@Override
	public Usuario login(String email, String password) {
		return usuarioService.login(email, password);
	}

	@Override
	public List<Configuracion> listar() {
		return confService.listar();
	}

	@Override
	public void eliminarUsuario(Long id) {
		confService.borrar(id);

	}

	@Override
	public void agregarConfiguracion(Configuracion configuracion) {
		confService.agregarConfiguracion(configuracion);

	}

	@Override
	public void actualizarConfiguraciones(Configuracion configuracion) {
		confService.actualizarConfiguraciones(configuracion);

	}

	@Override
	public List<Articulo> listarArticulos() {
		return artService.listarArticulos();
	}
	
	@Override
	public List<Articulo> listarArticlosBetSellers() {
		return artService.listarArticlosBetSellers();
	}

	@Override
	public List<Compra> listarMisCompras(Long id_usuario) {
		return comprasService.listarMisCompras(id_usuario);
	}

	@Override
	public List<Compra> listarCompras() {
		return comprasService.listarCompras();
	}

	@Override
	public Resultado actualizarRanking(List<RankingArticulo> ranking) {
		return artService.actualizarRanking(ranking);
	}

	@Override
	public void agregarItemCompra(Long idCompra, Long idArticulo,
			Double precio, Integer cantidad) {
		comprasService.agregarItemCompra(idCompra, idArticulo, precio, cantidad);
	}

	@Override
	public void eliminarItemCompra(Long idCompra, Long idArticulo) {
		comprasService.eliminarItemCompra(idCompra, idArticulo);
	}

	@Override
	public void checkoutCompra(Long idCompra, Double total) {
		comprasService.checkoutCompra(idCompra, total);
		
	}

	@Override
	public void updateItemCompra(Long idCompra, Long idArticulo, Double cantidad) {
		comprasService.updateItemCompra(idCompra, idArticulo, cantidad);
		
	}

	@Override
	public Resultado enviarInformeAuditoria(String moduloId, String fecha, String mensaje) {
		try {
			return notificarService.enviarInformeAuditoria(moduloId, fecha, mensaje);
		} catch (Exception e) {
			Resultado resultado = new Resultado();
			resultado.setErrorConMensaje("Surgio un error ejecutando los servicios.");
			return resultado;
		}
	}

	@Override
	public Compra crearCompra(Compra compra) {
		// TODO Auto-generated method stub
		return comprasService.crearCompra(compra);
	}

	@Override
	public Resultado notificarVenta(Compra compra) {
		return notificarService.notificarVenta(compra);
	}

}
